//Camera Header types borrowed from...
//http://www.codecolony.de/opengl.htm
//Hung Nguyen 
//Jeremy Sardoma
//Matthew Alcazar
#include <stdio.h>  
#include <gl\glut.h>
#include <math.h>
#include <iostream>
#include <Windows.h>

struct Struct3dVector {
	GLfloat x,y,z;
};
struct Struct2dVector {
	GLfloat x,y;
};

class Camera {
public:  //can set to private later...set to public so we can print for testing purposes
	Struct3dVector Position;
	Struct3dVector Direction;


	bool ViewDirChanged;
	bool gravity;
	bool turbo;

	GLfloat XRot, YRot, ZRot;
	void GetViewDir(void);
public:
	Camera();
	void Render(void);
	void Move(Struct3dVector Direction);
	void RotateX(GLfloat Angle);
	void RotateY(GLfloat Angle);
	void RotateZ(GLfloat Angle);
	void RotateXYZ(Struct3dVector Angle);
	void Forward(GLfloat Distance);
	void StrafeRight(GLfloat Distance);
	void Up(GLfloat Distance);
	void Update();
};

Struct3dVector Float3dVector(GLfloat x, GLfloat y, GLfloat z);
Struct3dVector Add3dVector(Struct3dVector *u, Struct3dVector *v);
void Add3dVectorToVector(Struct3dVector *dst, Struct3dVector *v2);